跳到主要内容

Linux Tmux 工具

Tmux 是什么?

Tmux 是 Screen 的替代品,虽然早就听说过这个 Tmux 了,但是一直没有抽出时间来学习

apt-get install tmux

列出所有快捷键

# 列出所有快捷键,及其对应的 Tmux 命令
tmux list-keys

tmux 默认的前缀操作都是 ctrl + b (类似 screen 的 ctrl + a),所有的快捷键都是 ctrl + b,按完松开,再去按下一个功能键!,不是一下子全按上(下文 C 代表 ctrl)

注意:在 Tmux 中

  • 一个 window 可以有好多个 panel。
  • 一个 session 可以有好多个 window。
  • 一个 tmux 可以有好多个 session。

配置

配置快捷键

#首先创建几个alias
vi ~/.zshrc
alias tls="tmux ls"
alias ta="tmux attach -t "
alias tk="tmux kill-session -t"
alias ts="tmux switch -t "
alias tn="tmux new -s"

编辑配置文件

touch ~/.tmux.conf
vi ~/.tmux.conf


set -g default-terminal 'screen-256color' # 设置默认颜色
set -g status-utf8 on # 支持 utf-8
set -g history-limit 100000 # 设置历史记录最大条数
setw -g mode-keys vi # 设置按键模式为 Vi 模式

# 例如把快捷键改成 c-x
set -g prefix C-x
unbind C-b
bind C-x send-prefix

# 以下配置为取消原有 hjkl 键的绑定
# 并绑定 Pane 选择,和 Vim 操作一致
unbind-key h
bind-key h select-pane -L

unbind-key j
bind-key j select-pane -D

unbind-key k
bind-key k select-pane -U

unbind-key l
bind-key l select-pane -R

bind-key u command-prompt -p "join pane from:" "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'"

鼠标滚屏

tmux 默认配置中最糟糕的体验就是滚屏查看和文本复制(大家可以先试试看)。你需要先使用 ⌃b [ 快捷键进入 copy 模式,然后使用翻页、字符定位来选择需要的字符,效率远没有鼠标选择来的快。

因此 tmux 提供了一些个性化配置项来优化这些配置,首先在 shell 中运行 touch ~/.tmux.conf 新建用户配置文件。在文件中增加以下内容:

# 开启鼠标模式
set -g mode-mouse on

# 允许鼠标选择窗格
set -g mouse-select-pane on

# 如果喜欢给窗口自定义命名,那么需要关闭窗口的自动命名
set-option -g allow-rename off

# 如果对 vim 比较熟悉,可以将 copy mode 的快捷键换成 vi 模式
set-window-option -g mode-keys vi


# tmux v2.1 开始 mouse 相关选项(包括 mouse-mode mouse-resize-pane mouse-select-pane mouse-select-window)改成
set-option -g mouse on # 变成了一个选项,,,

配置文件修改完成后,可以 tmux kill-server 重启所有 tmux 进程,或者在 tmux 会话中使用 ⌃b : 进入控制台模式,输入 source-file ~/.tmux.conf 命令重新加载配置。(这个 ⌃b 指 Ctrl + b)

会话操作

创建会话

# 创建新的会话
tmux

# 创建新的会话,并自定义会话名为test
tmux new -s test

# 创建新的终端,并自定义终端名为test, 但不进入会话
tmux new -s test -d

如果上面使用命令的出现以下错误

sessions should be nested with care, unset $TMUX to force

直接命令行输入 unset TMUX 就可以了

或者使用快捷键 C + b,c 创建

暂时离开会话(挂后台)

tmux 有2 种方法当当前会话置于后台:

  • 方法1: ctrl + b , 松开后再输入 d
  • 方法2: 直接输入 tmux detach

查看已创建会话

tmux ls

重命名会话

# 重命名会话
tmux rename-session -t 0 <new-name>

或者

# 重命名当前会话
C + b $

进入会话

# 默认进入第一个会话
tmux a

# 进入到名称为test的会话
tmux a -t test

# 其实完整命令为 tmux attach-session, 使用中一般都是简写为tmux a

切换其他会话

# 使用 session 编号切换
tmux switch -t 0
# 使用 session 名称切换
tmux switch -t <session-name>

或者使用快捷键

# 选择需要跳转的session会话
C + b s

断开会话

# 断开当前session
C + b d

退出并删除会话

exit 或 ctrl + d

强制删除会话

# 仅仅删除 test 会话(即使是 attached 状态,也会删除)
tmux kill-session -t test

# 删除所有会话(attached状态的会略过)
tmux kill-session

窗口操作

分屏操作全部命令

% 左右平分出两个窗格
" 上下平分出两个窗格
x 关闭当前窗格
{ 当前窗格前移
} 当前窗格后移
; 选择上次使用的窗格
o 选择下一个窗格,也可以使用上下左右方向键来选择
space 切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1 至 ⌥5来切换
z 最大化当前窗格,再次执行可恢复原来大小
q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格

窗口操作全部命令

c 新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态

p 切换至上一窗口

n 切换至下一窗口

w 窗口列表选择,注意 macOS 下使用 ⌃p 和 ⌃n 进行上下选择

& 关闭当前窗口

, 重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id

0 切换至 0 号窗口,使用其他数字 id 切换至对应窗口

f 根据窗口名搜索选择窗口,可模糊匹配

快速:子窗口管理

# 创建子窗口
ctrl+b c
# 显示列表
ctrl+b w
# 关闭子窗口
ctrl+b x
# 修改窗口名
ctrl+b ,

快速:分屏

# 上下分屏
ctrl+b "

# 左右分屏
ctrl+b %

# 此时可以用 ctrl+b h/j/k/l 来切换分屏了

在 shell 脚本中使用

# tmux 使用 send 命令进行推送,结尾可以加一个 enter ,直接回车
tmux send -t test "cmd" enter

Reference